package com.net.xpay.common.util;

import com.warrenstrange.googleauth.GoogleAuthenticator;
import com.warrenstrange.googleauth.GoogleAuthenticatorKey;

import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 增加google 动态验证码工具类
 * 增加googleauth-1.1.2.jar
 * <p>
 * account,会员账号, secret 安全码, issuer 服务名称,如印象笔记等,  除了安全码非空外,都可为空
 * Google Authenticator 约定的二维码信息格式 : otpauth://totp/{account}?secret={secret}&issuer={issuer}
 */
public class GoogleAuthUtil {


    public static void main(String[] args) {
        String key = getKeyStr();//P3IBV7BGUR3BKVCL //2TRXIQBK3SGJ5EQN
//        String key = "P3IBV7BGUR3BKVCL";//16 位由Base32 的密码组成的服务码
//        int code = getVerCodeTime(key);
//        boolean isPattern = isPattern(key, code);
//        System.out.println(isPattern);
        System.out.println(key);
    }

    /**
     * 获得为用户随机生成的安全码
     */
    public static String getKeyStr() {
        GoogleAuthenticator gAuth = new GoogleAuthenticator();
        final GoogleAuthenticatorKey key = gAuth.createCredentials();
        return key.getKey();
    }

    /**
     * 判断输入的验证码是否符合
     * @param key      安全码
     * @param password 验证码,根据时间来生成的验证码
     */
    public static boolean isPattern(String key, int password) {
        GoogleAuthenticator gAuth = new GoogleAuthenticator();
        return gAuth.authorize(key, password);
    }


    /**
     * 获得TOTF算法生成的验证码,根据时间产生
     */
    public static int getVerCodeTime(String secretKey) {
        GoogleAuthenticator gAuth = new GoogleAuthenticator();
        return gAuth.getTotpPassword(secretKey);
    }

    /**
     * @param account 账号
     * @param secretKey 秘钥
     * @param issuer 发布者（网址或者网站名）
     */
    public static String buildKeyUrl(String account, String secretKey, String issuer) {
        return "otpauth://totp/" + account + "?secret=" + secretKey + "&issuer=" + issuer;
    }
}